package com.jhs.kjs.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;

import com.jhs.kjs.dto.MenuDTO;
import com.jhs.kjs.dto.UserDTO;
import com.jhs.kjs.handler.SpamPreventHandler;
import com.jhs.kjs.handler.exception.AldangMessegeException;
import com.jhs.kjs.model.UserModel;
import com.jhs.kjs.service.IAdminMenuService;
import com.jhs.kjs.service.ICommonService;

@Controller
public class CommonController {

	@Autowired
	ICommonService commonService;


	@Autowired
	IAdminMenuService adminMenuService;

	/**
	 * 세션에 담겨 있는 사용자 정보를 가지고 온다. 세션에 없으면 db에서 가지고 온다.
	 * 
	 * @param request
	 * @return
	 */
	public UserDTO getUser(HttpServletRequest request) {
		Map<String, String> param = new HashMap<String, String>();
		HttpSession session = request.getSession(false);
		if (session != null
				&& session.getAttribute(UserModel.USER_SESSION_INFO) != null)
			return (UserDTO) session.getAttribute(UserModel.USER_SESSION_INFO);

		String userId = session.getAttribute(UserModel.USER_ID).toString();
		if (StringUtils.isEmpty(userId))
			throw new AldangMessegeException("세션 정보가 만료되었습니다. 다시 로그인 해 주세요.");

		param.put(UserModel.USER_ID, userId);

		UserDTO userSessionInfo = commonService.getUser(param);
		userSessionInfo.setUserPw("****");
		session.setAttribute(UserModel.USER_SESSION_INFO, userSessionInfo);
		return userSessionInfo;
	}

	/**
	 * 
	 * @param request
	 * @param getNew
	 *            가 true이면 db에서 사용자 정보를 가지고 온다.
	 * @return
	 */
	public UserDTO getUser(HttpServletRequest request, boolean getNew) {
		if (!getNew)
			return getUser(request);

		HttpSession session = request.getSession(false);
		session.removeAttribute(UserModel.USER_SESSION_INFO);
		return getUser(request);
	}

	
	public void logController(){
		
	}
	
	

	public void errorMessageHandler(HttpServletRequest request,
			ModelAndView mav, String errorMsg) {
		mav.addObject("msg", errorMsg);
		SpamPreventHandler.INSTANCE.addSpamFree(request, mav);
	}
	
	
	/**
	 * 모든 메뉴 다 가지고 오기. 사용/미사용 전부, 공지, 일반 게시판 포함 
	 * @return
	 */
	public List<MenuDTO> getAllBoardList(){
		return adminMenuService.getAllMenuList();
	}
	
	/**
	 * 모든 메뉴 다 가지고 오기. 사용, 공지, 일반 게시판 포함 
	 * @return
	 */
	public List<MenuDTO> getAllUseBoardList(){
		return adminMenuService.getAllUseMenuList();
	}
	
	/**
	 * 공지 게시판. 미사용 미포함 
	 * @return
	 */
	public List<MenuDTO> getUserBoardList(){
		return adminMenuService.getUserMenuList();
	}
	

	/**
	 * 일반 게시판, 미사용 미포함 
	 * @return
	 */
	public List<MenuDTO> getNoticeBoardList(){
		return adminMenuService.getNoticeMenuList();
	}
	
	
	public MenuDTO getMenuInfo(int menuIndex){
		MenuDTO menu = new MenuDTO();
		menu.setMenuIndex(menuIndex);
		return adminMenuService.getMenuByMenuIndex(menu);
	}
	
	
//	public Long getCustomerCode(HttpServletRequest request) {
//		Map<String, String> param = new HashMap<String, String>();
//		HttpSession session = request.getSession(false);
//		if (session != null && session.getAttribute("customerCode") != null)
//			return (Long) session.getAttribute("customerCode");
//
//		param.put(UserModel.USER_ID, session.getAttribute(UserModel.USER_ID)
//				.toString());
//		Long customerCode = commonService.getUser(param)
//				.getCommon_customerCode();
//		session.setAttribute("customerCode", customerCode);
//
//		return customerCode;
//	}
//
//	public CustomerDTO getCustomer(HttpServletRequest request, Long customerCode) {
//		HttpSession session = request.getSession(false);
//
//		Map<String, Long> param = new HashMap<String, Long>();
//		param.put("customerCode", customerCode);
//		CustomerDTO customer = commonService.getCustomer(param);
//
//		session.setAttribute("customer", customer);
//		return customer;
//	}
//
//	public List<CustomerDTO> getSearchCustomer() throws Exception {
//		return commonService.getSearchCustomer();
//	}
}
